package com.lanchetech.user.service;


import com.lanchetech.bean.dto.OrderItemDTO;
import com.lanchetech.bean.request.*;
import com.lanchetech.bean.response.*;
import com.lanchetech.bean.vo.*;
import com.lanchetech.common.exception.ResultCodeException;
import com.lanchetech.entity.*;
import com.lanchetech.user.config.ReturnPayInfoVO;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

public interface OrderService {
    ResultData<List<OrderSkuItemVO>> getConfirmOrderSkuInfo(List<OrderItemDTO> req,Long userId) ;

    ResultData<ConfirmOrderResp> getConfirmOrderDetail(User user, List<OrderItemDTO> req);

    ResultData<ReturnPayInfoVO> createWechatPayOrder(User user, OrderReq req, HttpServletRequest httpServletRequest);

    ResultData<Byte> getOrderStatus(Long id);

    void completeShopOrder(Orders orders, List<OrderSkuVO> orderSkuVOList, User user);

    String wechatOrderNotify(String xmlData);

    BaseResp addToShoppingCart(User user, ShoppingCart shoppingCart);

    ResultData<ShoppingCartVO> getShoppingCartSkuInfo(User user);

    BaseResp deleteShoppingCart(User user, Long skuId, String skuIds);

    ResultData<BasePageResp<OrderResp>> getOrderPage(User user, PageReq req);

    ResultData<BasePageResp<OrderResp>> getShopOrderPage(User user, PageReq req);

    ResultData<Long> getUserIdByNameOrPhone(User user, String param);

    ResultData<OrderDetailResp> getOrderDetail(User user, Long orderId);

    ResultData<OrderDetailResp> getOrderDetailForShop(User user, Long orderId);

    BaseResp deleteOrders(User user, Long id);

    ResultData<OrderComment> getOrderCommentDetail(User user, Long orderSkuId);

    BaseResp editOrderComment(User user, OrderComment orderComment);

    BaseResp toggleOrderComment(User user, Long id);

    BaseResp deleteComment(User user, Long id);

    BaseResp editAfterSale(User user, AfterSale afterSale);

    BaseResp editAfterSaleLogistics(User user, AfterSale afterSale);

    ResultData<AfterSale> getAfterSale(User user, Long id);

    BaseResp cancelAfterSale(User user, Long id);

    ResultData<BasePageResp<AfterSaleResp>> getAfterSalePage(User user, PageReq req);

    ResultData<String> getLogisticsTrace(User user, Long orderId);

    ResultData<LogisticsAndAddressVO> getLogisticsTraceAndAddress(User user, Long orderId);

    ResultData<OrderSkuAndOrderAddressVO> getOrderSkuAndOrderAddress(User user, Long orderSkuId);

    BaseResp confirmOrder(User user, Long orderId);

    ResultData<OrderQrcodeInfoVO> getOrderQrcodeInfo(PageReq req);

    ResultData<OrderSkuVO> verifyOrderInfoByHashId(String hashId);

    BaseResp verifyConfirmOrderSku(String hashId);

    ResultData<BasePageResp<UserCommissionResp>> getFriendOrderPage(User user, UserCommissionReq req);

    ResultData<BasePageResp<OrderSkuRecommendVO>> getShopOrderRecommendPage(PageReq req);

    ResultData<BasePageResp<OrderSkuRecommendVO>> getUserRecommendPage(PageReq req);

    BaseResp updateOrderNameAndPhone(Orders req);

    ResultData<AnotherPayOrderVO> anotherPayOrderDetail(Long orderId);

    ResultData<ReturnPayInfoVO> payForOtherOrder(User user, Long orderId, HttpServletRequest httpServletRequest);

    ResultData<BasePageResp<OrderPayVO>> getAnotherPayOrderPage(OrderPayReq req);

    ResultData<RushOrderDetailVO> getRushOrderDetail(Long orderId);

    ResultData<BasePageResp<RushOrderResp>> getRushOrderPage(RushOrderReq req);

    ResultData<BasePageResp<RushOrderSkuVO>> getRushOrderResultPage(RushOrderReq req);

}